package processes

import (
	"fmt"
)

// 因为UserMgr只有一份，且经常会用到，所以定义为全局变量
var (
	userMgr *UserMgr
)

type UserMgr struct {
	onlineUsers map[int]*UserProcess
}

// 完成初始化的工作
func init() {
	userMgr = &UserMgr{
		onlineUsers: make(map[int]*UserProcess, 1024),
	}
}

// 完成对onlineUsers的添加,修改也和添加一样
func (this *UserMgr) AddonlineUsers(up *UserProcess) {
	this.onlineUsers[up.UserId] = up
}

// 删除
func (this *UserMgr) DelonlineUsers(userId int) {
	delete(this.onlineUsers, userId)
}

// 返回当前所有在线用户
func (this *UserMgr) GetAllonlineUsers(up *UserProcess) map[int]*UserProcess {
	return this.onlineUsers
}

// 根据id返回UserProcess
func (this *UserMgr) GetonlineUserById(userId int) (up *UserProcess, err error) {
	// 从map中找一个值
	up, ok := this.onlineUsers[userId]
	if !ok { // 说明根据当前用户id查找的用户不在线
		err = fmt.Errorf("用户%d不在线", userId)
		return
	}
	return
}
